const axios = require('axios')
const md5Hex = require('md5-hex')
const querystring = require('querystring')

/**
 * @技术QQ群: 可登录官网https://www.kdniao.com/右侧查看技术群号
 * @see: https://kdniao.com/api-recognise
 * @copyright: 深圳市快金数据技术服务有限公司
 * ID和Key请到官网申请：https://kdniao.com/reg

 * 单号识别接口
 * 此接口基于所有单号规则，用来识别快递单号所属哪家快递公司,若单号符合多家快递公司单号规则会返回多个结果，第一位可能性最大。
 * 正式地址：https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx
 *
 *
 * 系统级参数
 * RequestData	   String	R	请求内容为JSON格式 详情可参考接口技术文档：https://www.kdniao.com/documents
 * EBusinessID	   String	R	用户ID
 * RequestType	   String	R	请求接口指令
 * DataSign	       String	R	数据内容签名，加密方法为：把(请求内容(未编码)+ApiKey)进行MD5加密--32位小写，然后Base64编码，最后进行URL(utf-8)编码
 * DataType	       String	R	DataType=2，请求、返回数据类型均为JSON格式

 * 应用级参数
 * R-必填（Required），O-可选（Optional），C-报文中该参数在一定条件下可选（Conditional）
 * LogisticCode	String(30)	 R	 快递单号
 */

// 请求url --正式地址
const Url = 'https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx'
// 用户ID，快递鸟提供，注意保管，不要泄漏
const EBusinessID = '1237100' // 即用户ID，登录快递鸟官网会员中心获取 https://www.kdniao.com/UserCenter/v4/UserHome.aspx
// API key，快递鸟提供，注意保管，不要泄漏
const ApiKey = '56da2cf8-c8a2-44b2-b6fa-476cd7d1ba17' // 即API key，登录快递鸟官网会员中心获取 https://www.kdniao.com/UserCenter/v4/UserHome.aspx

post(Url, getParams()).then(res => {
  console.log(res.data)
})
// 以form表单形式提交post请求，post请求体中包含了应用级参数和系统级参数

function getParams() {
  // 请求接口指令
  const RequestType = '2002'
  // 组装应用级参数
  const RequestData = { LogisticCode: '3967950525457' }
  const DataSign = Buffer.from(md5Hex(JSON.stringify(RequestData) + ApiKey)).toString('base64')
  const reqParams = {
    RequestType,
    EBusinessID,
    DataSign,
    RequestData: JSON.stringify(RequestData),
    DataType: 2
  }
  return reqParams
} // 组装系统级参数

async function post(url, data) {
  axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
  const res = await axios.post(url, querystring.stringify(data))
  return res
}
